from typing import Union, Optional

from fastapi import Query
from pydantic import BaseModel, Field

from like.schema_base import EmptyStrToNone


class MedicalIcd10InsuranceMappingListIn(BaseModel):
    """存储ICD10国临版2.0与医保版2.0对照信息的列表参数"""
    id: Union[int, None, EmptyStrToNone] = Query()  # 主键ID，用于唯一标识每条记录
    national_clinical_version_code: Union[str, None, EmptyStrToNone] = Query()  # 国临版编码，用于标识国临版的相关条目
    national_clinical_version_name: Union[str, None, EmptyStrToNone] = Query()  # 国临版名称，对应国临版编码的具体名称
    medical_insurance_version_2_0_code: Union[str, None, EmptyStrToNone] = Query()  # 医保版2.0编码，用于标识医保版2.0的相关条目
    medical_insurance_version_2_0_name: Union[str, None, EmptyStrToNone] = Query()  # 医保版2.0名称，对应医保版2.0编码的具体名称
    create_time: Union[int, None, EmptyStrToNone] = Query()  # 记录创建时间，为13位长整型的毫秒时间戳
    update_time: Union[int, None, EmptyStrToNone] = Query()  # 记录更新时间，为13位长整型的毫秒时间戳


class MedicalIcd10InsuranceMappingExportIn(MedicalIcd10InsuranceMappingListIn):  
    """存储ICD10国临版2.0与医保版2.0对照信息的导出参数"""
    export: Union[int, None] = Query()  # 导出模式
    page_start: Optional[int] = None    # 导出起始页
    page_end: Optional[int] = None      # 导出结束页
    page_size: int = Query()            # 每页数量
    file_name: Optional[str] = None     # 导出文件名    


class MedicalIcd10InsuranceMappingDetailIn(BaseModel):
    """存储ICD10国临版2.0与医保版2.0对照信息的详情参数"""
    id: int = Query(gt=0)  # 主键ID，用于唯一标识每条记录


class MedicalIcd10InsuranceMappingAddIn(BaseModel):
    """存储ICD10国临版2.0与医保版2.0对照信息的新增参数"""
    national_clinical_version_code: str  # 国临版编码，用于标识国临版的相关条目
    national_clinical_version_name: str  # 国临版名称，对应国临版编码的具体名称
    medical_insurance_version_2_0_code: str  # 医保版2.0编码，用于标识医保版2.0的相关条目
    medical_insurance_version_2_0_name: str  # 医保版2.0名称，对应医保版2.0编码的具体名称


class MedicalIcd10InsuranceMappingEditIn(BaseModel):
    """存储ICD10国临版2.0与医保版2.0对照信息的编辑参数"""
    national_clinical_version_code: str  # 国临版编码，用于标识国临版的相关条目
    national_clinical_version_name: str  # 国临版名称，对应国临版编码的具体名称
    medical_insurance_version_2_0_code: str  # 医保版2.0编码，用于标识医保版2.0的相关条目
    medical_insurance_version_2_0_name: str  # 医保版2.0名称，对应医保版2.0编码的具体名称


class MedicalIcd10InsuranceMappingDelIn(BaseModel):
    """存储ICD10国临版2.0与医保版2.0对照信息的删除参数"""
    id: int = Field(gt=0)  # 主键ID，用于唯一标识每条记录


class MedicalIcd10InsuranceMappingOut(BaseModel):
    """存储ICD10国临版2.0与医保版2.0对照信息的返回信息"""
    id: Optional[int]  # 主键ID，用于唯一标识每条记录
    national_clinical_version_code: str  # 国临版编码，用于标识国临版的相关条目
    national_clinical_version_name: str  # 国临版名称，对应国临版编码的具体名称
    medical_insurance_version_2_0_code: str  # 医保版2.0编码，用于标识医保版2.0的相关条目
    medical_insurance_version_2_0_name: str  # 医保版2.0名称，对应医保版2.0编码的具体名称
    create_time: Optional[int]  # 记录创建时间，为13位长整型的毫秒时间戳
    update_time: Optional[int]  # 记录更新时间，为13位长整型的毫秒时间戳

    class Config:
        orm_mode = True
